/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Views;

import entity.Cliente;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Tiago
 */
public class ModeloTabelaCliente extends AbstractTableModel{

    private String[] colunas = new String[] {"Código", "Nome", "Sobrenome", "RG", "CPF", "Endereço", "Salário"};
    
    private List<Cliente> lista = new ArrayList();
    
    public ModeloTabelaCliente(List<Cliente> lista) {
        this.lista = lista;
    }
    
    public ModeloTabelaCliente() {
        
    }
    
    @Override
    public int getRowCount() {
        return this.lista.size();
    }

    @Override
    public int getColumnCount() {
        return this.colunas.length;
    }
    
    @Override
    public String getColumnName(int index) {
        return this.colunas[index];
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        if (column == 0) {
            return false;                 
        }
        return true;
    }
    
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Cliente cliente = lista.get(rowIndex);
        switch (columnIndex) {
            case 0: return cliente.getIdCliente();
            case 1: return cliente.getNome();
            case 2: return cliente.getSobrenome();
            case 3: return cliente.getRg();
            case 4: return cliente.getCpf();
            case 5: return cliente.getEndereco();
            case 6: return cliente.getSalario();
            default : return "";
        }
    }
    
    @Override
    public void setValueAt(Object value, int col, int row) {
        try {
            Cliente cliente = lista.get(row);
            switch (col) {
                case 0:
                    cliente.setIdCliente((Integer) value);
                    break;
                case 1:
                    cliente.setNome((String) value);
                    break;
                case 2:
                    cliente.setSobrenome((String) value);
                    break;                    
                case 3: 
                    cliente.setRg((String) value);
                    break;
                case 4:
                    cliente.setCpf((String) value);
                    break;
                case 5:
                    cliente.setEndereco((String) value);
                    break;
                case 6:
                    cliente.setSalario((Double) value);
                    break;
                default:                    
            }
            this.fireTableCellUpdated(row, col);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    public boolean removeCliente(Cliente cliente) {
        int linha = this.lista.indexOf(cliente);
        boolean result = this.lista.remove(cliente);
        this.fireTableRowsDeleted(linha, linha); //atualiza o jTable
        return result;
    }
    
    public void adicionaCliente(Cliente cliente) {
        this.lista.add(cliente);
        this.fireTableRowsInserted(lista.size()-1, lista.size()-1); //atualiza o jTable
    }
    
    public void setListaClientes(List<Cliente> clientes) {
        this.lista = clientes;
        this.fireTableDataChanged();
    }
    
    public void limpaTabela() {
        int indice = lista.size()-1;
        if(indice < 0) {
            indice = 0;
        }
        this.lista = new ArrayList();
        this.fireTableRowsDeleted(0, indice);
    }
    
    public Cliente getCliente(int linha) {
        return lista.get(linha);
    }
}
